<?php
/////////////////////////////////////////////////////////////////////////////
// 这个文件是 便民信息 项目的 信息分类管理 模块
// Copyright (c) 2015 – 2016 http://www.lijian.website
// 时间:2016年1月17日上午8:03:39
// 用户名:Lenovo
// 作   者:小天天天天
/////////////////////////////////////////////////////////////////////////////
namespace Admin\Controller;
use Think\Controller;
class CategoryController extends Controller{
	/*
	//用于验证管理员是否有权限操作此功能
	public function __construct(){
		//$power=session('power');
		//dump($power);
		//die();
		parent::__construct();
		$this->checkadmin();


	}

	//核对当前管理的权限1全站管理管3分类管理员
	public function checkadmin(){
		$power=session('power');
		//dump($power);

		if($power==1 || $power==3){
			return true;
		}
		else{

			$this->error('你没有访问权限');
		}

	}
	*/
	public function index(){
		
		$categorymodel=M("Category");
		$data=$categorymodel->where(1)->select();
		$cates=$this->tree($data);
		$this->assign("cats",$cates);
		//展示所有分类
		$this->display();
	}
	
	public function insert(){
		//接收新分类数据并插入数据库
		$data['parent_id']=$_POST['parentid']+0;
		$data['cat_name']=$_POST['catname'];
		$data['sort_order'] =trim($_POST['sort_order'])+0;
		
		$categorymodel=M("Category");
		if ($categorymodel->add($data)) {
			$this->success('新增分类成功!',U('Category/index'));
		}else {
			$this->error('新增分类失败!',U('Category/index'));
		}
	}
	//修改数据
	public function update(){
		//接收数据
		$data['cat_id']=$_POST['catid'];
		$data['parent_id']=$_POST['parentid']+0;
		$data['cat_name']=$_POST['catname'];
		$data['sort_order'] =trim($_POST['sort_order'])+0;
		$arr=$this->getSubIds($data['cat_id']);
		if (in_array($data['parent_id'],$arr)){
			$this->error("不能将当前分类及其后代分类作为其上级分类!",U('Category/index'),4);
		}
		$categorymodel=M("Category");
		if ($categorymodel->save($data)) {
			$this->success("修改成功!",U('Category/index'));
		}else {
			$this->error("修改成功!",U('Category/index'));
		}
		
	}
	
	public function delete() {
		$cat_id=$_GET['id']+0;
		
		$categorymodel=M("Category");
		$arr=$categorymodel->where("parent_id={$cat_id}")->select();
		if (count($arr)>1) {
			$this->error("请先移除该分类下的子分类,在进行删除!");
		}
		$status=$categorymodel->where("cat_id={$cat_id}")->delete();
		if ($status) {
			$this->success("删除成功!",U('Category/index'));
		}else {
			$this->success("删除失败,请刷新后再试!",U('Category/index'));
		}
	}
	
	//树排序
	/**
	 * 重新排序(此处应该感谢王超平老师)
	 * @param  array  $arr 要排序的数组
	 * @param  integer $pid 从哪里开始，默认是0，顶级开始
	 * @param  integer $level 表示层级，默认是0，顶级
	 * @return array     排好序的数组
	 */
	public function tree($arr,$pid = 0,$level = 0){
		$res = array();
		foreach ($arr as $v) {
			if ($v['parent_id'] == $pid) {
				//说明找到，保存起来
				//首先，需要将level保存到当前分类中
				$v['level'] = $level;
				//$res[] = $v;
				//继续查找，递归，条件发生变化
				$child = $this->tree($arr,$v['cat_id'],$level+1);
				//返回的过程中，处理，将找到的后代分类，放入到$res中，合并的方式
				$res[] = $v;
				$res = array_merge($res,$child);
			}
		}
		//返回结果
		return $res;
	}
	
	//获取指定分类下的所有后代分类的cat_id, 也包括它自己
	public function getSubIds($cat_id){
		$categorymodel=M("Category");
		$allcats = $categorymodel->where("1")->select();
		$cats = $this->tree($allcats,$cat_id); //二维数组
		$ids = array();
		foreach ($cats as $v) {
			$ids[] = $v['cat_id'];
		}
		//将自己也追加到$ids中
		$ids[] = $cat_id;
		//返回结果
		return $ids;
	}
	 
}
